home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / dsp / 96000tar.z / 96000tar / 96000 / appb / b120.asm < prev    next >
Assembly Source File  |  1992-04-28  |  5KB  |  95 lines

  1. ; This program was originally published in the Motorola DSP96002 Users Manual
  2. ; and is provided under a DISCLAIMER OF WARRANTY available from Motorola DSP
  3. ; Operation, 6501 William Cannon Drive West, Austin, Texas 78735-8598.  For
  4. ; more information, refer to the DSP96002 Users Manual, Appendix B, DSP
  5. ; Benchmarks.
  6. ;
  7. ; B.1.20    Normalized Lattice Filter  
  8. ;                                      
  9. ;                                         NORMALIZED LATTICE FILTER 
  10. ;                          COEFFICIENT AND STATE VARIABLE STORAGE 
  11. ;          r0                                  r4 
  12. ;                                              
  13. ;       
  14. ;     X: q2 k2 q1 k1 q0 k0 w3 w2 w1 w0    Y: sx s2 s1 s0 
  15. ;        m0=3*N (=9, mod 10)                 m4=N  (=3, mod 4) 
  16.  
  17. ;; 
  18. ;                                                  SINGLE SECTION 
  19. ;                                           EQUATIONS: 
  20. ;                          
  21. ;                                          t'=t*q-k*s 
  22. ;                                          u'=t*k+s*q 
  23. ;                                          t'?t 
  24. ;                         
  25. ;                                          output=sum (w*u') 
  26. ;                            
  27. ;          
  28. ;           
  29. ;          
  30. ;
  31. ;                                       DSP56000 IMPLEMENTATION  
  32. ;                                                            Program     ICycles
  33. ;                                                            Words 
  34. ;  move       #coef,r0        ;point to coefficients 
  35. ; move       #3*N,m0         ;mod on coefficients 
  36. ; move       #state,r4       ;point to state variables 
  37. ; move       #N,m4           ;mod on filter states 
  38. ; movep      y:datin,y0      ;get input sample 
  39. ; move           x:(r0)+,x1           ;get first Q in table     1     1 
  40. ; do    #order,_endnlat                                         2     3 
  41. ; mpy   x1,y0,a  x:(r0)+,x0 y:(r4),y1 ;q*t, get k, get s        1     1 
  42. ; macr -x0,y1,a  b,y:(r4)+            ;q*t-k*s, save new s      1     1 
  43. ; mpy   x0,y0,b             a,y0      ;k*t, set t'              1     1 
  44. ; macr  x1,y1,b  x:(r0)+,x1           ;k*t+q*s, get next q      1     1 
  45. ;_endnlat 
  46. ; move                      b,y:(r4)+ ;sv scnd lst st           1     1 
  47. ; move                      a,y:(r4)+ ;save last state          1     1 
  48. ; clr   a                   y:(r4)+,y0 ;clr acc, get fst st     1     1 
  49. ; rep   #order                         ;do fir taps             1     2 
  50. ; mac   x1,y0,a  x:(r0)+,x1 y:(r4)+,y0                          1     1 
  51. ; macr  x1,y0,a             (r4)+      ;rnd, adj pointer        1     1 
  52. ; movep a,y:datout           ;output sample 
  53. ;                                                                            ---   ---
  54. ;                                                      Totals: 13   5N+10
  55. ;                                             DSP96002 IMPLEMENTATION 
  56. ;                                                          Program    ICycles
  57. ;                                                          Words 
  58.  move       #coef,r0        ;point to coefficients 
  59.  move       #3*N,m0         ;mod on coefficients 
  60.  move       #state,r4       ;point to state variables 
  61.  move       #N,m4           ;mod on filter states 
  62.  
  63.  move p     y:datin,d5.s    ;get input sample 
  64.  
  65.  move                     x:(r0)+,d6.s ;get q                ;  1     1 
  66.  do     #N,_elat                                             ;  2     3 
  67. ;      t*q       k*w+q*s     get k    get s 
  68.  fmpy d5,d6,d2  fadd.s d1,d3 x:(r0)+,d4.s y:(r4)+,d7.s       ;  1     1 
  69. ;      k*s                            save s 
  70.  fmpy.s d4,d7,d0                        d3.s,y:(r4)+         ;  1     1 
  71. ;      t*k       w*q-k*s; 
  72.  fmpy d5,d4,d1  fsub.s d0,d2                                 ;  1     1 
  73. ;      q*s         t?t'   get q 
  74.  fmpy.s d6,d7,d3             d2.s,d5.s    x:(r0)+,d6.s       ;  1     1 
  75. _elat 
  76.                 fadd.s d1,d3           ;finish last t          1     1 
  77.  move                                d3.s,y:(r4)+ ;save 2nd s  1     1 
  78.  fclr   d2                           d5.s,y:(r4)+ ;save 1st s  1     1 
  79.  fclr   d3                           y:(r4)+,d7.s ;get s       1     1 
  80.  rep   #N                                                     ; 1     2 
  81.  fmpy  d6,d7,d2 fadd.s d2,d3 x:(r0)+,d6.s y:(r4)+,d7.s  ;fir   1     1 
  82.                 fadd.s d2,d3              (r4)+   ;adj r4      1     1 
  83.  
  84.  move p  d3.s,y:datout 
  85. ;                                                            ; ---    --- 
  86. ;                                                     Totals:  14   5N+11 
  87.